package com.mbengue.corp.artisan.dao;

import java.util.List;

import org.springframework.dao.DataAccessException;

import com.mbengue.corp.artisan.modele.Client;

public interface ClientDao {

  /**
   * Ajoute le nouveau client à la BD
   * @param client Client à ajouter
   * @throws DataAccessException
   */
  public void ajouterClient(Client client) throws DataAccessException;

  /**
   * Met à jour le client
   * @param client {@link Client}
   * @throws DataAccessException
   */
  public void modifierClient(Client client) throws DataAccessException;

  /**
   * Trouve tous les clients de la base
   * @return Une liste de client
   * @throws DataAccessException
   */
  public List<Client> tousLesClients() throws DataAccessException;

  /**
   * Trouve un client via son identifiant
   * @param idClient identifiant du client
   * @return {@link Client}
   * @throws DataAccessException
   */
  public Client trouverClientParId(long idClient) throws DataAccessException;

  /**
   * Trouve trouve tous les clients dont le nom et/ou prenom<br/>
   * correspond aux arguments donnés en entrée
   * @param nom
   * @param prenom
   * @return Une liste de client
   * @throws DataAccessException
   */
  public List<Client> trouverClientParNomPrenom(String nom, String prenom) throws DataAccessException;

  /**
   * Trouve un client via son numero de telephone.
   * @param telephone Numero de telephone du client
   * @return {@link Client}
   * @throws DataAccessException
   */
  public Client trouverClientParNumeroTelephone(String telephone) throws DataAccessException;

  /**
   * Supprime le client donné en entree
   * @param client {@link Client} à supprimer
   * @throws DataAccessException
   */
  public void supprimerClient(Client client) throws DataAccessException;

  /**
   * Renvoie une liste des nom-prenom des clients.
   * @return {@link List} <code> <</code>{@link String} <code>> </code>
   * @throws DataAccessException
   */
  public List<String> tousLesNomsClients() throws DataAccessException;

  /**
   * Trouve trouve tous les clients dont le nom et le prenom<br/>
   * correspondent aux arguments donnés en entrée
   * @param nom
   * @param prenom
   * @return Une liste de client
   * @throws DataAccessException
   */
  public List<Client> trouverClientParNomEtPrenom(String nom, String prenom);
}
